/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：UICompositeTextComboBoxDataList.js<br>
 * 日期：2016年9月13日<br>
 * 作者: 杨顺强<br>
 * 功能：定义一个 包含文字描述、下拉列表框和一个dadaList的复合组件<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/
window.makeNamespace(window,"Rainier.UI.V2");

/**
 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList<br>
 * 函数功能：复合组件容器的构造函数定义<br>
 * 参数输入：<br>
 * 异常信息：<br>
 */
Rainier.UI.V2.UICompositeTextComboBoxDataList = Rainier.UI.V2.UIComposite.extend({
	
	NAME : "Rainier.UI.V2.UICompositeTextComboBoxDataList",
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList.init<br>
	 * 函数功能：初始化复合组件内部的参数信息<br>
	 * 参数输入：objParentComposite : 父类组件<br>
	 * 参数输出：objProperties 参数格式如下
	 * {
	 *   //第一个参数 当前参数的名字，用来标识该参数，易于获取和修改，为必须参数
	 *   optionName   :""		
	 * 	 //第二个参数 该组件描述性信息，该参数对于组件基本都有，建议必写
	 *   text		:
	 *   	{
	 *   		style:"",		//在text的样式，控制style的位置					
	 *   		text :"",		//该text的内容。
	 *   	},
	 *   //第三个参数 为该组件内部的组件信息，该组的类型comboBox;
	 *   combobox	  : {}, //或者参数数据设置参见esayUI官网对应组件的Properties属性 建议必写
	 *   //第四个参数 为dataList组件,用来展示对应的属性值
	 *   dataList 	  : {} 参数数据设置参见esayUI官网对应组件的Properties属性 建议必写
	 * }<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	init : function(objParentComposite,objProperties){
		if(objProperties.optionName){
			this.optionName = objProperties.optionName;
		}else{
			throw new Error("该组件的参数名为必设项,请修改对象参数信息");
		}
		if(objProperties.text){
			this.textPro = objProperties.text;
		}else{
			throw new Error("该组件的参数名为必设项,请修改对象参数信息");
		}
		if(objProperties.combobox){
			this.comboboxProperties = objProperties.combobox;
		}else{
			throw new Error("该组件的参数名为必设项,请修改对象参数信息");
		}
		if(objProperties.dataList){
			this.dataListProperties = objProperties.dataList;
		}else{
			throw new Error("该组件的参数名为必设项,请修改对象参数信息");
		}
		this.comboBox = null;
		this.dataList = null;
		this._super(objParentComposite,objProperties);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList.createComposite<br>
	 * 函数功能：创建div容器，完成div容器的创建工作<br>
	 * 参数输入：eleParent : 父元素节点<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	createComposite : function(eleParent){
		this._super(eleParent);
		//style类型未"padding-left:20px;padding-top:10px;width:150;height:300;float:left"
		var newEle = this.CreateElement("div",this.m_objProperties.id,null,
				{style:"margin-left:15px;margin-top:10px;width:150;float:left"});
		eleParent.append(newEle);
		
		//向DIV容器中添加子组件
		//1  添加字符描述语句
		this.text = new Rainier.UI.V2.UICompositeText(this,this.textPro);
		//2 添加对应的combobox组件；
		this.comboBox 		= new Rainier.UI.V2.UICompositeComboBox(this,this.comboboxProperties);
		this.comboBox.getElement().before("<br><br>");
		this.comboBox.getElement().next().after("<br><br>");
		
		var _this = this;
		
		//测试calendar.resize方法
		SelectListener = Rainier.UI.V2.UIEventListener.extend({
		    NAME : "Rainier.UI.V2.UIEventListener.onSelect",
		    init : function(){
		        this._super();
		    },
		    onEvent : function(sEvent,objEventSource,objArgs){
		    	var selected = objArgs[0].index;
		    	_this.filteDatalist(selected);
		    }
		});
		this.comboBox.registerEventListener('onSelect',new SelectListener());
		
		//3添加对应的dataList组件
		this.dataList 		= new Rainier.UI.V2.UICompositeDataList(this,this.dataListProperties);
		this.dataList.selectRow(0);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList.filteDatalist<br>
	 * 函数功能：根据combox值筛选datalist<br>
	 * 参数输入：index 数据列表中对象的index值<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	filteDatalist : function(index){
		var dataArr = [];
		if(index === '0'){
			dataArr = this.dataListProperties.data;
		}
		else{
			dataArr = $.grep(this.dataListProperties.data,function(data){
				return data.index == index;
			})
		}
		this.dataList.loadData(dataArr);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList.addDataItem<br>
	 * 函数功能：添加数据至数据列表<br>
	 * 参数输入：data : {index:0,value:'变量名称'}<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	addDataItem : function(data){
		if(this.dataListProperties.data.indexOf(data) < 0){
			this.dataListProperties.data.push(data);
			this.dataList.loadData(this.dataListProperties.data);
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList.removeDataItem<br>
	 * 函数功能：从数据列表删除一个数据<br>
	 * 参数输入：data : {index:0,value:'变量名称'}<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	removeDataItem : function(data){
		var index = this.dataListProperties.data.indexOf(data);
		if( index >= 0){
			this.dataListProperties.data.splice(index,1);
			this.dataList.loadData(this.dataListProperties.data);
			
			var val = this.comboBox.getValue();
			var comboBoxIndex = -1;
			//由于this.comboBox.getValue()获取的值不稳定，第一次是value，后面是index，作此判断
			$.each(this.comboBox.getData(),function(i,data){
				if(val == data.index || val == data.value){
					comboBoxIndex = data.index;
					return false;
				}
			})
			if(comboBoxIndex >= 0){
				this.filteDatalist(comboBoxIndex);
			}
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList.getOptionName<br>
	 * 函数功能：<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	getOptionName : function(){
		return this.optionName;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList.getComboBox<br>
	 * 函数功能：<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	getComboBox : function(){
		return this.comboBox;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList.getDataList<br>
	 * 函数功能：<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	getDataList : function(){
		return this.dataList;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList.getComboBoxValue<br>
	 * 函数功能：<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	getComboBoxValue : function(){
		return this.comboBox.getValue();
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList.getDataListSelected<br>
	 * 函数功能：<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	getDataListSelected : function(){
		return this.dataList.selected();
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList.getComponentValue<br>
	 * 函数功能：获取当前组件的值，<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：一个json对象 {optionName : ""}<br>
	 * 异常信息：无<br>
	 */
	getComponentValueObj :function(){
		return this.getDataListValue();
	},
	
	/**
	 * 函数名称：<br>
	 * 函数功能：<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	setComponentValue : function(){
		
	},
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeTextComboBoxDataList.automaticSelectNext<br>
	 * 函数功能：默认选中下一行<br>
	 * 参数输入：无<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	automaticSelectNext:function(rowIndex){
		var leftDataList = this.getDataList();
		rowIndex == 0?rowIndex = 0:rowIndex--;
		leftDataList.selectRow(rowIndex);
	}
});
